[新機能] AWS FargateにSpotキャパシティプロバイダが追加されたので試してみた #reinvent
こんにちは。サービスグループの武田です。
AWS FargateがAmazon EKSに対応してコンテナ界隈が盛り上がっていますね。
その裏ではFargateがSpot(EC2のスポットインスタンスみたいなもの)に対応しました!Spotを使用することで、最大70%割り引きでFargateを利用できます。また、Spotキャパシティプロバイダは全リージョンで対応しています!東京リージョンでも今日から使い始められます!
AWS Fargate Spot Now Generally Available | AWS News Blog
さっそく試してみましたので、その様子をお届けします。
なお、タスク定義の手順は本質ではないため、補足として後半に回しました。同じように試してみたいという方はそちらも参考にしてください。
Spotキャパシティプロバイダを使ってみた
まずはクラスターを作成します。Amazon ECSのページにアクセスし、左ペインから「クラスター」を選択し、[クラスターの作成]ボタンを押下します。
デフォルトの「ネットワーキングのみ」のまま、[次のステップ]ボタンを押下します。
クラスター名は任意の名前をつけましょう。またパブリックアクセス可能なサブネットが今回は必要だった *1ため、オプションでVPCも作成しています。
他はデフォルトのまま、ページ下部の[作成]ボタンを押下します。
作成されました。そのままクラスターのページに遷移しましょう。
クラスターのページに[Capacity Providers]というタブがありますのでクリックします。
作成済みのプロバイダが確認できます。 FARGATE_SPOT があることに注目です!
実はこのままではSpotは使えません。クラスターの設定を変更してSpotを使うように設定します。右上にある[Update Cluster]ボタンを押下します。
Default capacity provider strategyの[Add provider]をクリックします。
プルダウンが現れるので、FARGATE_SPOTを選択します。選択できたら[更新]ボタンを押下します。
更新されました。
これで準備は完了です。クラスターページの[タスク]タブを選択し、続いて[新しいタスクの実行]ボタンを押下します。
タスク定義に起動するタスク、タスクの数は2としてみました。
次のVPCなどのネットワーク定義に進みます。ここで注意が必要なんですが、パブリック IP の自動割り当てがなぜか「DISABLED」しか選択できませんでした。今回はタスク定義の都合上パブリックIPが必要なので有効化する必要がありました。
おそらくすぐに修正されるはずですが、現時点でのワークアラウンドを紹介します。
まずページ上部に戻って、「Switch to launch type」のリンクをクリックします。
表示が切り替わるので、起動タイプでFARGATEを選択し、次に「Switch to capacity provider strategy」のリンクをクリックします。
この作業をしてページ下部にスクロールすると、自動割り当ての「ENABLED」が選択できます。
これらの設定ができたらタスクを起動しましょう。クラスターページのタスクタブを見てみると、タスクが2つ起動されていることが確認できます。
いずれかのタスク詳細を開くと、Capacity providerの項目がFARGATE_SPOTになっています!
まとめ
FargateのSpotキャパシティプロバイダがサポートされたことで、より安価にFargateが利用できます。素敵ですね。ただEC2のスポットインスタンスと同じように、利用する上での考慮事項はもちろんあります。これらをしっかりと検討したうえで、便利に使っていきましょう!
Using AWS Fargate Capacity Providers - Amazon Elastic Container Service
補足情報:タスク定義
今回の検証で使用したタスク定義の作り方を掲載しておきます。同じように試してみたいという方は、参考に作ってみてください。
ECSのページにアクセスし、左ペインからタスク定義を選択し、[新しいタスク定義]ボタンを押下します。
起動タイプはFARGATEで[次のステップ]ボタンを押下します。
適当に名前を付けましょう。
タスク実行ロールはすでにあるものを使ってもいいですし、新しく作っても大丈夫です。今回はあるものを指定しています。またメモリとvCPUは一番小さいものを指定しました。
次にコンテナの定義を追加します。[コンテナの追加]ボタンを押下します。
コンテナ名は適当に。イメージはamazonlinux:2
を指定しました。
確認用のコマンドとして/bin/sh,-c,while :; do date; sleep 5; done
を指定しました。
そのほかはデフォルトのまま[追加]ボタンを押下します。
コンテナが追加されました。
他はデフォルトのまま、ページ下部の[作成]ボタンを押下します。
無事にタスク定義が作成できました。
脚注
- Docker Hubからイメージをpullするため ↩